Timecop 可以幫助你在測試時將時間凍住,因為有些訊息中會帶有時間,如果要確保時間一致就必須要將時間凍住才可以測試。
gem 'timecop'
& bundle install
freeze
=> 時間都會停留在指定的時間,或是直到你返回原來的時間。
[16] pry(main)> Timecop.freeze(Time.parse('2020/09/30 08:30:30')) # 2020-09-30 08:30:30 +0800
[17] pry(main)> Time.now # 2020-09-30 08:30:30 +0800
[18] pry(main)> Timecop.return
[19] pry(main)> Time.now # 2021-09-29 22:23:25 +0800
travel
=> 時間會移動到你指定的時間,並且繼續
[16] pry(main)> Timecop.travel(Time.parse('2021/11/30 08:30:30')) # 2021-11-30 08:30:30 +0800
# wait 3 second
[17] pry(main)> Time.now # 2021-11-30 08:30:33 +0800
[18] pry(main)> Timecop.return
[19] pry(main)> Time.now # 2021-09-29 22:23:25 +0800
scale
=> 將時間單位調整
[37] pry(main)> Timecop.scale(10) # 1 秒等於 10 秒
2020-09-29 23:15:58 +0800
[46] pry(main)> sleep 1
[47] pry(main)> Time.now
2020-09-29 23:16:08 +0800
before(:all) do
Timecop.freeze(Time.current)
end
after(:all) do
Timecop.return
end
在測試前將時間凍住,並在最後 return,通常必須成對為最佳
參考來源:
用 Timecop 自由穿梭時間軸